package io.mft.datasource.mq;

import cn.hutool.core.util.ObjectUtil;
import io.mft.commons.config.datasource.DSConfigSource;
import io.mft.commons.config.mq.MqConfig.ConfigValue;
import io.mft.datasource.mq.container.MqContainerManager;
import io.mft.datasource.mq.container.MqContainerType;
import io.mft.dev.base.MFTRuntimeConfig;
import lombok.extern.slf4j.Slf4j;

/**
 * 基础功能插件程序入口
 * 
 * @说明：TODO
 * @类型名称：MqPluginApplication
 * @创建者: 胡常建
 * @创建时间: 2021年2月18日 上午9:45:52
 * @修改者: 胡常建
 * @修改时间: 2021年2月18日 上午9:45:52
 */
@Slf4j
public class MqBootstrap {


	private static void initDSConfigSource(DSConfigSource dsConfigSource) {
		if (!("rabbitmq".equals(dsConfigSource.getType()) || "kafka".equals(dsConfigSource.getType()))) {
			return;
		}
		MqContainerType mqContainerType = MqContainerType.valueOf(dsConfigSource.getType());
		MqContainerManager.getInstance().init(mqContainerType, dsConfigSource);
	}

	private static void initConfigValue(ConfigValue configValue) {
		if (ObjectUtil.isNull(configValue)||ObjectUtil.isNull(configValue.getType())) {
			return;
		}
		MqContainerType mqContainerType = MqContainerType.valueOf(configValue.getType());
		MqContainerManager.getInstance().init(configValue.getPluginId(), mqContainerType, configValue);
	}

	public static void init(MFTRuntimeConfig config) {
		config.getDsConfig().values().forEach(dsConfigSource -> {
			initDSConfigSource(dsConfigSource);
		});
		config.getMqConfigs().forEach(mqConfig -> {
			mqConfig.values().forEach(list -> {
				list.forEach(configValue->{
					initConfigValue(configValue);
				});
			});
		});
	}

}
